home *** CD-ROM | disk | FTP | other *** search
/ Freelog 22 / freelog 22.iso / Prog / Djgpp / RHIDE14B.ZIP / doc / rhide / editor.txt < prev    next >
Encoding:
Text File  |  1997-10-01  |  48.4 KB  |  1,511 lines

  1. This is the documentation for SET's Editor.
  2.  
  3. Copyright (C) 1996, 1997 Salvador Eduardo Tropea
  4.  
  5. This documentation may be freely distributed, provided this copyright notice
  6. is left intact on all copies.
  7.  
  8. EDITOR
  9. ******
  10.  
  11.   Table of Contents
  12.   *****************
  13.  
  14. 1 Introduction
  15.   1.1 What is SETs Editor?
  16.   1.2 Requirements
  17.   1.3 About the Author
  18. 2 Available commands
  19.   2.1 Conventions
  20.   2.2 Cursor movement
  21.   2.3 Insert and Delete
  22.   2.4 Blocks
  23.   2.4.1 Block modes
  24.   2.4.2 Selecting with the mouse or Shift
  25.   2.4.2.1 Using the mouse
  26.   2.4.2.2 Using the Shift key
  27.   2.4.3 Indentation
  28.   2.4.4 Rectangular Blocks
  29.   2.5 Pseudo Macros
  30.   2.5.1 Please enlighten me - what is that?
  31.   2.5.2 How can I customize that?
  32.   2.6 Miscellaneous
  33. 3 Keyboard
  34.   3.1 How to configure the keyboard
  35.   3.2 A program to find the scancodes
  36. 4 Editing Modes
  37.   4.1 Overwrite
  38.   4.2 Autoindent
  39.   4.3 Real Tabs
  40.   4.4 Persistent Blocks
  41.   4.5 Intelligent C indent
  42.   4.5.1 Can you explain to me more about the behavior of this mode?
  43.   4.5.2 Do you have more examples?
  44.   4.6 Column cursor
  45.   4.7 Row cursor
  46.   4.8 Match pair highlight
  47.   4.9 Syntax Highlight
  48. 5 Calculator
  49. 6 How to contact me
  50.   6.1 Bugs
  51. 7 Index
  52. 8 Index of key commands
  53.  
  54. 1 Introduction
  55. **************
  56.  
  57.    This document describes the use of the SET's editor; this editor was
  58. designed for programmers and to be used alone or inside of the RHIDE.
  59.  
  60.    This documentation may be freely distributed with the editor or the RHIDE
  61. package or any part thereof, provided this copyright notice is left intact on
  62. all copies.
  63.  
  64.    Permission is granted to copy and distribute modified versions of this
  65. manual under the conditions for verbatim copying, provided that the entire
  66. resulting derived work is distributed under the terms of a permission notice
  67. identical to this one.
  68.  
  69.   People who helped me develop the editor:
  70.  
  71.    * ROBERT HöHNE <Robert.Hoehne@Mathematik.TU-Chemnitz.DE>
  72.      (with some base routines, a lot of patches and reports)
  73.  
  74.    * MOLNAR LASZLO <molnarl@cdata.tvnet.hu>
  75.      (with the calculator, tests and a lot of ideas)
  76.  
  77.    * MAREK HABERSACK <grendel@ananke.amu.edu.pl>
  78.      (with tests and a lot of ideas)
  79.  
  80.    * FRANK DONAHOE <fdonahoe@wilkes1.wilkes.edu>
  81.      (with a lot of corrections to this text)
  82.  
  83.   The editor is freeware, but the source-code of this editor is copyrighted by
  84. Salvador Eduardo Tropea.  If you want to include the editor in your
  85. application, using the whole code or only a part contact at first me
  86. <salvador@inti.edu.ar>
  87.  
  88.   This editor is included in the Robert Höhne's RHIDE as a replacement for the
  89. original TVision's editor class.
  90.  
  91. 1.1 What is SETs Editor?
  92. ========================
  93.  
  94.   SET's editor is an editor designed to be used by programmers; the main target
  95. of the editor is C and C++ code but Pascal and Clipper are supported too.
  96.  
  97.   The editor was designed to be very similar to the DOS standard editors for C,
  98. especially to Borland's IDE editor. The editor supports a lot of WordStar
  99. style commands plus some CUA commands, so if you have used any editor that
  100. uses these kinds of commands you'll find my editor very familiar. On the
  101. other hand if you have never used a DOS editor, especially if you use VI on
  102. UNIX machines you'll feel lost. You can configure the keyboard but this
  103. feature is relatively limited.  (Section 3.1).
  104.  
  105. 1.2 Requirements
  106. ================
  107.  
  108.   For now I only plan to distribute my editor inside of RHIDE.  Requirements
  109. are the requirements of RHIDE.
  110.  
  111. 1.3 About the Author
  112. ====================
  113.  
  114. The editor was created by Salvador Eduardo Tropea with some code contributed
  115. by Robert Höhne
  116.  
  117.      E-Mail: Salvador Eduardo Tropea <salvador@inti.edu.ar>
  118.      
  119.      Telephone: (+541) 759-0013
  120.      Postal Address:
  121.      Salvador E. Tropea
  122.      Curapaligüe 2124
  123.      (1678) Caseros - 3 de Febrero
  124.      Prov: Buenos Aires
  125.      Argentina
  126.  
  127. 2 Available commands
  128. ********************
  129.  
  130.   In this section I will explain the features of the editor and the default
  131. configuration for the keyboard. If you want to change some assignment of a
  132. key consult "configure the keyboard".   (Section 3.1).
  133.  
  134.   Read the conventions topic first to understand my way of indicating
  135. keystrokes.
  136.  
  137.   In the description of each command I'll include the internal name used by the
  138. editor because this name is needed to configure the keyboard.
  139.  
  140. 2.1 Conventions
  141. ===============
  142.  
  143.   I'll use some conventions when talking about the keystrokes needed to trigger
  144. some command. So here is what I use:
  145.  
  146.   The key named <Ctrl> or Control is represented as `^'; this key doesn't have
  147. any effect used alone inside of the editor so the `^' symbol will be used only
  148. in conjunction with the name of some key indicating that you must press the
  149. two keys at the same time. For example, `^A' is <Ctrl> and <A> at the same
  150. time.  When I say "at the same time" that means: press `<Ctrl>', hold it, and
  151. press the other key; that's the reason to put <A> after <Ctrl>.
  152.  
  153.   To indicate a sequence of keystrokes I'll use a dash to separate the keys. For
  154. example, `^K-B' is <Ctrl> and <K> at the same time, and then press <B>, of
  155. course release `^K' first.
  156.  
  157.   To indicate keys pressed at the same time other than `^x' I'll use a plus.
  158. For example, `Shift+^Insert' is the three keys at the same time!
  159.  
  160.   I don't think that you are stupid; the editor is written for programmers, but
  161. I wanted to make that clear to avoid problems ;-).
  162.  
  163. 2.2 Cursor movement
  164. ===================
  165.  
  166.    * Character left
  167.      - Command: cmbCharLeft
  168.      - Key: Left arrow
  169.      - Alternate: ^S
  170.  
  171.    * Character right
  172.      - Command: cmbCharRight
  173.      - Key: Right arrow
  174.      - Alternate: ^D
  175.  
  176.    * Word left
  177.      - Command: cmbWordLeft
  178.      - Key: ^Left arrow
  179.      - Alternate: ^A
  180.  
  181.    * Word right
  182.      - Command: cmbWordRight
  183.      - Key: ^Right arrow
  184.      - Alternate: ^F
  185.  
  186.    * Line up
  187.      - Command: cmbLineUp
  188.      - Key: Up arrow
  189.      - Alternate: ^E
  190.  
  191.    * Line down
  192.      - Command: cmbLineDown
  193.      - Key: Down arrow
  194.      - Alternate: ^X
  195.  
  196.    * Scroll the screen one line up
  197.      - Command: cmbScrollUp
  198.      - Key: ^W
  199.      - Alternate:
  200.  
  201.    * Scroll the screen one line down
  202.      - Command: cmbScrollDown
  203.      - Key: ^Z
  204.      - Alternate:
  205.  
  206.    * Page up
  207.      - Command: cmbPageUp
  208.      - Key: PgUp
  209.      - Alternate: ^R
  210.  
  211.    * Page down
  212.      - Command: cmbPageDown
  213.      - Key: PgDn
  214.      - Alternate: ^C
  215.  
  216.    * Beginning of line
  217.      - Command: cmbLineStart
  218.      - Key: Home
  219.      - Alternate: ^Q-S
  220.  
  221.    * End of line
  222.      - Command: cmbLineEnd
  223.      - Key: End
  224.      - Alternate: ^Q-D
  225.  
  226.    * Top of window
  227.      - Command: cmbFirstLineInScreen
  228.      - Key: ^Q-E
  229.      - Alternate: ^Home
  230.  
  231.    * Bottom of window
  232.      - Command: cmbLastLineInScreen
  233.      - Key: ^Q-X
  234.      - Alternate: ^End
  235.  
  236.    * Top of file
  237.      - Command: cmbTextStart
  238.      - Key: ^Q-R
  239.      - Alternate: ^PgUp
  240.  
  241.    * Bottom of file
  242.      - Command: cmbTextEnd
  243.      - Key: ^Q-C
  244.      - Alternate: ^PgDn
  245.  
  246. 2.3 Insert and Delete
  247. =====================
  248.  
  249.    * Delete the character under cursor
  250.      - Command: cmbDelChar
  251.      - Key: Del
  252.      - Alternate: ^G
  253.  
  254.    * Delete character to left
  255.      - Command: cmbBackSpace
  256.      - Key: Backspace
  257.      - Alternate: ^H
  258.  
  259.    * Delete line
  260.      - Command: cmbDelLine
  261.      - Key: ^Y
  262.      - Alternate:
  263.  
  264.    * Delete to end of line
  265.      - Command: cmbDelEnd
  266.      - Key: ^Q-Y
  267.      - Alternate: Shift+^Y
  268.  
  269.    * Delete to start of line
  270.      - Command: cmbDelStart
  271.      - Key: ^Q-H
  272.      - Alternate:
  273.  
  274.    * Delete word at left
  275.      - Command: cmbDelWord
  276.      - Key: ^T
  277.      - Alternate:
  278.  
  279.    * Delete word at right
  280.      - Command: cmbDelPrevWord
  281.      - Key: ^Backspace
  282.      - Alternate:
  283.  
  284.    * Insert line
  285.      - Command: cmbNewLine
  286.      - Key: Enter
  287.      - Alternate: ^N
  288.  
  289.    * Insert mode on/off
  290.      - Command: cmbInsMode
  291.      - Key: Ins
  292.      - Alternate: ^V
  293.  
  294.   When you are in insert mode all the typed characters are inserted in the
  295. text, but when the insert mode is off the typed characters replace the old
  296. text. The editor starts with insert mode on. You can quickly know the mode by
  297. the cursor shape. When the insert mode is on, the cursor is only a line, but
  298. when it is off, the cursor is block shaped.
  299.  
  300. 2.4 Blocks
  301. ==========
  302.  
  303.   A block is a selected portion of the text. You can copy, delete, etc. blocks
  304. of text. The associated commands are:
  305.  
  306.    * Move to beginning of block
  307.      - Command: cmbGoBeginBlock
  308.      - Key: ^Q-B
  309.      - Alternate:
  310.  
  311.    * Move to end of block
  312.      - Command: cmbGoEndBlock
  313.      - Key: ^Q-K
  314.      - Alternate:
  315.  
  316.    * Set beginning of block
  317.      - Command: cmbStartSelect
  318.      - Key: ^K-B
  319.      - Alternate:
  320.  
  321.    * Set end of block
  322.      - Command: cmbEndSelect
  323.      - Key: ^K-K
  324.      - Alternate:
  325.  
  326.    * Hide/Show block
  327.      - Command: cmbHideSelect
  328.      - Key: ^K-H
  329.      - Alternate:
  330.  
  331.    * Mark line
  332.      - Command: cmbMarkLine
  333.      - Key: ^K-L
  334.      - Alternate:
  335.  
  336.    * Mark word
  337.      - Command: cmbMarkWord
  338.      - Key: ^K-T
  339.      - Alternate:
  340.  
  341.    * Delete block and copy it to the Clipboard
  342.      - Command: cmbCut
  343.      - Key: ^K-Y
  344.      - Alternate: Shift+Del
  345.  
  346.    * Copy the selected block
  347.      - Command: cmbCopyBlock
  348.      - Key: ^K-C
  349.      - Alternate:
  350.  
  351.    * Move block
  352.      - Command: cmbMoveBlock
  353.      - Key: ^K+V
  354.      - Alternate:
  355.  
  356.    * Copy to Clipboard
  357.      - Command: cmbCopy
  358.      - Key: ^Ins
  359.      - Alternate:
  360.  
  361.    * Delete block
  362.      - Command: cmbClear
  363.      - Key: ^Del
  364.      - Alternate:
  365.  
  366.    * Paste from Clipboard
  367.      - Command: cmbPaste
  368.      - Key: Shift+Ins
  369.      - Alternate:
  370.  
  371.    * Read block from disk
  372.      - Command: cmbReadBlock
  373.      - Key: ^K-R
  374.      - Alternate: Shift+^R
  375.  
  376.    * Write block to disk
  377.      - Command: cmbWriteBlock
  378.      - Key: ^K-W
  379.      - Alternate: Shift+^W
  380.  
  381.    * Replace the block by the Clipboard block
  382.      - Command: cmbReplaceSelect
  383.      - Key: Shift+^Ins
  384.      - Alternate:
  385.  
  386.    * Convert to Uppercase
  387.      - Command: cmbToUpper
  388.      - Key: ^K-M
  389.      - Alternate:
  390.  
  391.    * Convert to Lowercase
  392.      - Command: cmbToLower
  393.      - Key: ^K-O
  394.      - Alternate:
  395.  
  396.    * Report the length of the block
  397.      - Command: cmbSelLength
  398.      - Key: ^Q-L
  399.      - Alternate:
  400.  
  401. 2.4.1 Block modes
  402. -----------------
  403.  
  404.   There are two block modes. One is the mode that the old editor of RHIDE used.
  405. This mode is used in CUA programs. The other is called Persistent Blocks.
  406.  
  407.   In the normal mode each time you select a block and then insert anything in
  408. it (with `cmbPaste' or by typing anything) the selected block is deleted and
  409. is replaced by the new text.
  410.  
  411.   In persistent blocks the selection is not replaced and is not lost when you
  412. move the cursor. From this comes the name "Persistent." In this mode you can
  413. use `cmbMoveBlock' and `cmbCopyBlock' without using the Clipboard. In
  414. addition you can apply indentations to the block ( (Section 2.4.3)), search
  415. only inside it, etc. That's what makes this mode much more powerful than the
  416. former. If you really like to replace the selected text by the selection of
  417. the Clipboard, that's the default behaviour of the first mode. You can use
  418. the `cmbReplaceSelect' command to achieve the same in the Persistent Blocks
  419. mode.
  420.  
  421. 2.4.2 Selecting with the mouse or Shift
  422. ---------------------------------------
  423.  
  424.   The described commands for selecting a block, `cmbStartSelect' and
  425. `cmbEndSelect', are good but not so quick. There are other ways to do this.
  426.  
  427. 2.4.2.1 Using the mouse
  428. .......................
  429.  
  430.   Using the mouse you need only point to the start place, hold the left button
  431. pressed and move the mouse to the end point of your block.
  432.  
  433.   To select a word with the mouse just double click on it.
  434.  
  435. 2.4.2.2 Using the Shift key
  436. ...........................
  437.  
  438.   Using the <Shift> key you only need to move the cursor to the start point,
  439. hold `<Shift>' pressed and move the cursor to the end point with any of the
  440. available cursor commands.  (Section 2.2).
  441.  
  442. 2.4.3 Indentation
  443. -----------------
  444.  
  445.   You can indent or unindent a block of text using various commands, but you
  446. must keep in mind that for now the editor is limited in the following:
  447. (Section 4.3) If you are using tabs to indent your text, don't mix the tabs
  448. with spaces and, if you are using spaces to indent, don't mix them with real
  449. tabs.
  450.  
  451.    * Indent block one position adding a space
  452.      - Command: cmbIndentBlkOne
  453.      - Key: ^K-I
  454.      - Alternate: Shift+^I
  455.  
  456.    * Unindent block one character - not an x position
  457.      - Command: cmbUnIndentBlkOne
  458.      - Key: ^K-U
  459.      - Alternate: Shift+^U
  460.  
  461.    * Indent block
  462.      - Command: cmbIndentBlk
  463.      - Key: ^K-Tab
  464.      - Alternate:
  465.  
  466.    * Unindent block
  467.      - Command: cmbUnIndentBlk
  468.      - Key: ^K-Shift+Tab
  469.      - Alternate:
  470.  
  471.    * Smart Indent block
  472.      - Command: cmbSmartIndent
  473.      - Key: ^Tab
  474.      - Alternate:
  475.  
  476.    * Smart Unindent block
  477.      - Command: cmbSmartUnIndent
  478.      - Key: Shift+^Tab
  479.      - Alternate:
  480.  
  481. `cmbUnIndentBlkOne' unindents deleting one char at the start of the line so
  482. if the line is indented with tabs the line will retract one tab.
  483.  
  484. `cmbIndentBlk' acts according to the mode. If you are using tabs, the editor
  485. will put one tab beginning each line. If you aren't using tabs the editor
  486. will operate the Tab command on the first line and then will use this amount
  487. of indentation on the entire block.  (Section 4.3).
  488.  
  489. `cmbUnIndentBlk' acts according to the mode too.  (Section 4.3) mode. This is
  490. just like `cmbUnIndentBlkOne' deleting one tab but if you don't use tabs the
  491. editor uses Backspace on the first used column of the first line of the block
  492. and unindents by the resulting amount all the block.
  493.  
  494. `cmbSmartIndent' and `cmbSmartUnIndent' indents taking as reference the { }
  495. pair where the block is, for example:
  496.        {
  497.      line1
  498.           line2
  499.         line3
  500.        }
  501.  
  502. After indenting a block that contains line1 to line3 is:
  503.        {
  504.         line1
  505.         line2
  506.         line3
  507.        }
  508.  
  509. The indentation is made with spaces.
  510.  
  511. 2.4.4 Rectangular Blocks
  512. ------------------------
  513.  
  514.   The editor includes a mode where you can select a rectangular portion of the
  515. text and copy, cut, clear, paste, move, etc. this region.  This tool is very
  516. useful for modifications on columns.
  517.  
  518.   Attention! The selected area is based on the X,Y coordinates. For this reason
  519. if you insert lines before the bottom of the rectangle the area won't be
  520. moved. I don't plan to move the area by now because that takes some CPU and I
  521. think that this selection is made just before using it. So don't report that
  522. like a bug. That is the way it works!
  523.  
  524.    * Set beginning of block
  525.      - Command: cmbSelRectStart
  526.      - Key: ^K-Shift+B
  527.  
  528.    * Set end of block
  529.      - Command: cmbSelRectEnd
  530.      - Key: ^K-Shift+K
  531.  
  532.    * Hide/Show block
  533.      - Command: cmbSelRectHide
  534.      - Key: ^K-Shift+H
  535.  
  536.    * Delete block and copy it to an special Clipboard
  537.      - Command: cmbSelRectCut
  538.      - Key: ^K-ShiftT
  539.  
  540.    * Move block
  541.      - Command: cmbSelRectMove
  542.      - Key: ^K+Shift+V
  543.  
  544.    * Copy to special Clipboard
  545.      - Command: cmbSelRectCopy
  546.      - Key: ^K-Shift+C
  547.  
  548.    * Delete block
  549.      - Command: cmbSelRectDel
  550.      - Key: ^K-Shift+L
  551.  
  552.    * Paste from special Clipboard
  553.      - Command: cmbSelRectPaste
  554.      - Key: ^K-Shift+P
  555.  
  556. 2.5 Pseudo Macros
  557. =================
  558.  
  559.   This feature is very useful to save some keystrokes. With this feature you
  560. can create a lot of shortcuts to make your life easiest.
  561.  
  562. 2.5.1 Please enlighten me - what is that?
  563. -----------------------------------------
  564.  
  565.   So now, What's a Pseudo Macro? It's like a macro but is triggered by two
  566. things: one the text behind the cursor, and two the `^Space' combination.
  567.  
  568.   And what's the result? The result is customizable, but by default there are
  569. some predefined behaviours. For example, type in a new window the following
  570. two characters: `#i' and the press `^Space' ...
  571.  
  572.   Surprised? I bet! You got: #include <.h> and the cursor just in the right
  573. place to write the name of the header.
  574.  
  575. Now write the famous stdio word, press `<End>', then `<Enter>' twice and now
  576. write the following two letters: `ma' and then `^Space' ...
  577.  
  578.   I bet this time you predicted better what will happen so you aren't so
  579. surprised ;-). Anyways, Surprise! Now type `pr' and the magic keys and ...
  580. `printf("");' appears. To end the happy history now type "Hello world!" That's
  581. all. You wrote the hello world program at a very good speed.
  582.  
  583.   Now you know what I mean when I say pseudo-macros.
  584.  
  585. 2.5.2 How can I customize that?
  586. -------------------------------
  587.  
  588.   Is very easy. There is a file called `pmacros.txt' in the same directory
  589. where you started the editor. This file contains the definitions for each
  590. pseudo macro. You can define up to 32 pseudo macros. (Please tell me if that
  591. isn't enough. I can sacrifice some time to make it dynamically expandable).
  592.  
  593.   Important: If you are using RHIDE consult the RHIDE documentation to know
  594. where is stored the `pmacros.txt' file.
  595.  
  596.   The `pmacros.txt' file is a very good example and is self-explained but I'll
  597. include here one example.
  598.  
  599. Trigger: "i("
  600. Mode: 0,1,0,1,0
  601.  "if (@0)\n"
  602.  "  {@1\n"
  603.    "}\n"
  604.  "\belse\n"
  605.  "  {@2\n"
  606.    "}"
  607.  
  608.   The Trigger keyword defines the two letter behind the cursor that will
  609. trigger the pseudo macro.
  610.  
  611.   The Mode keyword indicates the mode that the editor will use when inserting
  612. the text. The modes are:
  613.  
  614.    * Overwrite                (Section 4.1)
  615.  
  616.    * Autoindent               (Section 4.2)
  617.  
  618.    * Use Tabs                 (Section 4.3)
  619.  
  620.    * Persistent blocks        (Section 2.4.1)
  621.  
  622.    * Intelligent C indent     (Section 4.5)
  623.  
  624.   Each mode can be 0 or 1. The editor will return to the original mode after
  625. expanding the pseudo macro. In this case the macro is expanded in the No
  626. overwrite, autoindent, don't use tabs, the blocks are persistent and don't be
  627. smart when indenting.
  628.  
  629.   The rest is the code to insert surrounded by ". You can use \b to indicate
  630. backspace, \n for newline and \\ to indicate a simple \. If you want to
  631. insert a @ you have to type it twice @@, because this character has a special
  632. meaning (see below).
  633.  
  634.   After the insertion the cursor is positioned in the place marked with @0.
  635. Don't forget to signal this point or the cursor will positioned at the
  636. beginning of the file. The places marked with @1, @2 and @3 are saved in the
  637. markers 7, 8 and 9.
  638.  
  639. 2.6 Miscellaneous
  640. =================
  641.  
  642.    * Autoindent mode on/off
  643.      - Command: cmbIndentMode
  644.      - Key: ^O
  645.  
  646.    * Find place marker
  647.      - Command: cmbGotoMarkn
  648.      - Key: ^Q n*
  649.  
  650.    * Set marker
  651.      - Command: cmbPutMarkn
  652.      - Key: ^K n*
  653.  
  654.    * Search the open curly bracket where the cursor is
  655.      - Command: cmbSearchStart
  656.      - Key: ^[
  657.  
  658.    * Search the close curly bracket where the cursor is
  659.      - Command: cmbSearchEnd
  660.      - Key: ^]
  661.  
  662.    * Search the ( where the cursor is
  663.      - Command: cmbSearchOpPar
  664.      - Key: Shift+^9
  665.  
  666.    * Search the ) where the cursor is
  667.      - Command: cmbSearchClPar
  668.      - Key: Shift+^0
  669.  
  670.    * Search the [ where the cursor is
  671.      - Command: cmbSearchOpCor
  672.      - Key: Shift+^[
  673.  
  674.    * Search the ] where the cursor is
  675.      - Command: cmbSearchClCor
  676.      - Key: Shift+^]
  677.  
  678.    * Undo
  679.      - Command: cmbUndo
  680.      - Key: Alt+Backspace
  681.  
  682.    * PMacro's Trigger
  683.      - Command: cmbExpandCode
  684.      - Key: ^Space
  685.  
  686.    * Goto Line
  687.      - Command: cmbGotoEditorLine
  688.      - Key: ^J
  689.  
  690.    * Set the options of the current window (Not in RHIDE)
  691.      - Command: cmbSetLocalOptions
  692.      - Key: Alt+L
  693.  
  694.    * Set the default options (Not in RHIDE)
  695.      - Command: cmbSetGlobalOptions
  696.      - Key: Alt+G
  697.  
  698.    * Convert all tabs in spaces
  699.      - Command: cmbExpandAllTabs
  700.      - Key: From menu
  701.  
  702.    * Compact the text using tabs
  703.      - Command: cmbCompactBuffer
  704.      - Key: From menu
  705.  
  706.    * Start recording a macro
  707.      - Command: cmbRecordMacro
  708.      - Key: Shift+F10
  709.  
  710.    * Stop recording a macro
  711.      - Command: cmbStopMacro
  712.      - Key: Alt+F10
  713.  
  714.    * Play a macro
  715.      - Command: cmbPlayMacro
  716.      - Key: ^F10
  717.  
  718. 3 Keyboard
  719. **********
  720.  
  721.   The editor uses the scancodes of the keys to trigger the different commands.
  722. You can reconfigure which key triggers some command. In addition some non-US
  723. keyboards can mess the commands so you could need to configure the editor for
  724. your keyboard.
  725.  
  726. 3.1 How to configure the keyboard
  727. =================================
  728.  
  729.   There are three associated files with the keyboard: `keybind.cc', `keybind.h'
  730. and `keybind.txt'.
  731.  
  732.   The `keybind.h' file contains the scancode number for each key and the number
  733. for each command. This file is included in `keybind.cc'. If your keyboard has
  734. a different assignment you can modify the scancodes in this file. For
  735. example, the German keyboards have the following sequence QWERTZ instead of
  736. the more common QWERTY, so each time you press `^Z' you won't get the
  737. function of `^Z', but of `^Y' instead. Some can live with it, but it is
  738. fixable.  To fix this problem you must correct the scancode of the Z key in
  739. `keybind.h.' But of course this affects `^Y' too. That's only an example. The
  740. most common problem is with the symbols like {, }, [, etc.  If you don't know
  741. how to find the scancode of a key take this link.   (Section 3.2).
  742.  
  743.   The `keybind.cc' file is a C++ file but you don't need to compile it and link
  744. with the editor, you only need to preprocess it (I used this method to save
  745. the time needed to make a parser ;-).
  746.  
  747.   To convert this file into a `keybind.txt' file use:
  748.  
  749.      cpp keybind.cc > keybind.txt
  750.  
  751. Where cpp is the C++ preprocessor. Any of the comment systems available in C++
  752. may be used, as cpp does not pass comments to the file, `keybind.txt'.  I
  753. guess that you have cpp, but if not you can use another C++ preprocessor or
  754. even Clipper using the /P switch.
  755.  
  756.   There are seven sections in the file, each section is the keyboard translation
  757. under certain situation.
  758. The sections are:
  759.  
  760.    * `NORMAL'
  761.      - Contains: The single key press.
  762.  
  763.    * `SHIFT'
  764.      - Contains: Shift plus a key.
  765.  
  766.    * `CONTROL'
  767.      - Contains: Control plus a key.
  768.  
  769.    * `SHIFT_CONTROL'
  770.      - Contains: Shift plus control plus a key (all at the same time).
  771.  
  772.    * `QUICK'
  773.      - Contains: A key after `^Q' or whatever you defined as `cmbCtrlQ'.
  774.  
  775.    * `BLOCK'
  776.      - Contains: A key after `^K' or whatever you defined as `cmbCtrlK'.
  777.  
  778.    * `BLOCK_SHIFT'
  779.      - Contains: A key plus shift after `^K' or whatever you defined as
  780.      `cmbCtrlK'.
  781.  
  782.    In each section you must put the keyboards and the command associated to it.
  783.    Use the following syntax:
  784.      Scan_Code = Command
  785.  
  786. Not all the scan codes are available. For example, you can't put:
  787.      RSHIFT = xxxxx
  788.  
  789.    Look at `keybind.h' to see the scan codes labels and the available commands.
  790.  
  791. Important Notes:
  792. I)
  793.   The new assignments are mixed with the original assignments, so if you want
  794. to eliminate an old key combination you *must* assign a `cmbNoCommand' to
  795. this key. For example, if you wish eliminate the BACKSPACE key and use the
  796. `^O' instead, you must:
  797.   1. put `BACKSPACE = cmbNoCommand' in the NORMAL section,
  798.  
  799.   2. put `O = cmbBackSpace' in the CONTROL section.
  800.  
  801. If you only do part two, you'll not eliminate the BACKSPACE key.
  802.  
  803. II)
  804.   If some thing is wrong in the `keybind.txt' file the program will inform the
  805. error. The line number is for the `keybind.txt' and not for `keybind.cc'
  806. (Sorry, some day I'll fix this).
  807. To continue the execution press any key and then enter.
  808.  
  809. III)
  810.   You can repeat an assignment, the last wins:
  811.  
  812.      BACKSPACE = cmbNoCommand
  813.      BACKSPACE = cmbBackSpace
  814.  
  815.   The first is ignored.
  816.  
  817. 3.2 A program to find the scancodes
  818. ===================================
  819.  
  820.   The author of the following program is Robert Höhne:
  821.  
  822. #include <stdio.h>
  823. #include <dos.h>
  824.  
  825. #ifdef __GNUC__
  826. #include <dpmi.h>
  827. #define REGS __dpmi_regs
  828. #define INTR(nr,r) __dpmi_int(nr,&r)
  829. #else
  830. #define REGS union REGS
  831. #define INTR(nr,r) int86(nr,&r,&r)
  832. #endif
  833.  
  834. unsigned short getshiftstate(void)
  835. {
  836.   REGS r;
  837.   r.h.ah = 0x12;
  838.   INTR(0x16,r);
  839.   return r.x.ax;
  840. }
  841.  
  842. unsigned short gkey(void)
  843. {
  844.   REGS r;
  845.   r.h.ah = 0x10;
  846.   INTR(0x16,r);
  847.   if (r.h.al == 0xE0 || r.h.al == 0) r.h.al = 0;
  848.   return r.x.ax;
  849. }
  850.  
  851. main()
  852. {
  853.   unsigned short key;
  854.   do
  855.   {
  856.     key = gkey();
  857.     fprintf(stdout,"%04X, scan code: %d\n",key,key>>8);
  858.   } while (1);
  859. }
  860.  
  861. 4 Editing Modes
  862. ***************
  863.  
  864.   The editor has nine settings that control the function and aspect of the
  865. editor. Not all can be controlled by RHIDE Beta 6 release 22/10, and I don't
  866. know if all the settings will be supported in the 1.0 release so if you don't
  867. find some setting in RHIDE and you feel that setting is really needed contact
  868. me.
  869.  
  870.   The settings are:
  871.  
  872. 4.1 Overwrite
  873. =============
  874.  
  875.   This setting controls if the typed characters are inserted in the buffer or
  876. if the typed characters replace the original ones.  (Section 2.3) for a
  877. detailed explanation.
  878.  
  879. 4.2 Autoindent
  880. ==============
  881.  
  882.   This setting controls what happend when you press <ENTER>. If this setting is
  883. off the cursor goes to the column 1 of a new line. If the mode is on the
  884. editor will try to keep the indentation of the code inserting spaces.
  885.  
  886. 4.3 Real Tabs
  887. =============
  888.  
  889.   This setting controls what happend when you press `<TAB>'. If this setting is
  890. on the editor will insert an ASCII 9 in this place.
  891.  
  892.   An ASCII 9 is a TAB, that means that the width of this char is enough to move
  893. the cursor to the next tabulator column. In the editor the tabulator columns
  894. are equidistant and the positions are controled by the Tab Size value.
  895.  
  896.   If this setting is off the editor won't put any ASCII 9 in your text.
  897. Instead the editor will insert enough spaces to move the cursor to the next
  898. tab-stop, but if the cursor is positioned on the first character of the line
  899. the editor will insert spaces to move this position to the next hole in the
  900. line over the line where you are. Confused? Sorry for my English, an example
  901. will clarify that:
  902.  
  903. This is a line over the line where you are
  904.  
  905. That's the line where the cursor is, at column one.
  906.  
  907.   After pressing TAB you'll get:
  908.  
  909. This is a line over the line where you are
  910.  
  911.      That's the line where the cursor is, at column one.
  912.  
  913.   Now can ask, Why this? Is that useful? The answer is that's very useful to
  914. keep your code indented, experiment using that under a line with if, for, etc.
  915.  
  916.   Another thing controlled by this setting is the behaviour of the <Backspace>
  917. key, when the setting is on the key is just 'delete the character at the left
  918. of the cursor' but when the setting is off this key is the 'Unindent' key.
  919.  
  920.   The editor is much more coherent when you choose to use TABs or not use TABs.
  921. If you mix the two modes you'll get some unexpected things, specially in the
  922. indentation of the blocks.
  923.  
  924.   Is better if you always work in a file without tabs and with this setting
  925. off. Then you'll get much from the editor.
  926.  
  927.   Now you can say: `But I really need tabs because I'm editing a make file!' or
  928. `because I'll send the file using an ultra slow link and I want the
  929. compression granted by the tabs.' In these cases you can first expand all
  930. tabs, then work without real tabs and at the finish of your work compact all
  931. possible spaces and generate a file with all the tabs that you need.
  932. (Section 2.6) section.
  933.  
  934. 4.4 Persistent Blocks
  935. =====================
  936.  
  937.   This setting controls the behaviour of the selected area.
  938.  
  939.    (Section 2.4.1) chapter for a detailed explanation.
  940.  
  941. 4.5 Intelligent C indent
  942. ========================
  943.  
  944.   This mode was designed to be used in jointly with the Pseudo Macros (
  945. (Section 2.5)) and the Real Tabs mode in off to achieve an easy way to indent
  946. the code making a better work than the Autoindent mode.
  947.  
  948.   In this mode the spaces inserted after pressing <ENTER> depend on the first
  949. word in the last line. For example, if you have:
  950.  
  951.      if (a==b)_
  952.  
  953.   With the cursor in the '_' position and press <ENTER> you'll get:
  954.  
  955.      if (a==b)
  956.        _
  957.  
  958.   Now you can do either of two things, 1) press space and write the code that
  959. will be executed by the if, or 2) if this a multiline code press { and
  960. <ENTER>.  In the last case you'll get:
  961.  
  962.      if (a==b)
  963.        {
  964.         _
  965.  
  966.   Now type your first line of code. Press <ENTER>. Write your next line.  Press
  967. <ENTER> again and then <Backspace>:
  968.  
  969.      if (a==b)
  970.        {
  971.         1st line;
  972.         2nd line;
  973.        _
  974.  
  975.   Now type } and press <ENTER> one more time:
  976.  
  977.      if (a==b)
  978.        {
  979.         1st line;
  980.         2nd line;
  981.        }
  982.      _
  983.  
  984.   As you can see the code is perfectly aligned without a significant work on
  985. your part.
  986.  
  987.   I tried to make this mode as smart as possible, but needs more work. If you
  988. have suggestions contact me.
  989.  
  990.   Another important thing is that this indentation has a personal style, my
  991. style ;-), so maybe you don't like it. If that's your case you can do the
  992. following things:
  993.  
  994.    * Use another way of indentation offered by the editor. For example, turn
  995.      on the Real Tabs mode and indent with tabs.
  996.  
  997.    * Customize the `pmacros.txt' file ( (Section 2.5)), actually this file is
  998.      coherent with this mode.
  999.  
  1000.    * The editor isn't configurable like Emacs or Brief using a language, but
  1001.      is written in C++ and chances that you know C++ are over the 90% so
  1002.      contact me and I'll help you to write the routines that you need to get
  1003.      an indentation in your own style :-).
  1004.  
  1005. 4.5.1 Can you explain to me more about the behavior of this mode?
  1006. -----------------------------------------------------------------
  1007.  
  1008.   I'll try to describe the behaviour of the mode:
  1009.  
  1010.   Each time you press <ENTER> the editor inserts a `\r\n' string in your text,
  1011. after that the editor searchs one line located above the new line that has at
  1012. least one character inside. This line is taken as reference. The editor
  1013. analyzes this line searching for:
  1014.  
  1015.    * The first non-blank character on this line.
  1016.  
  1017.    * The first word on this line.
  1018.  
  1019.    * The first parenthesis.
  1020.  
  1021.    * The balance of parentheses on the line.
  1022.  
  1023.    * The last non-blank and non-comment character in the line.
  1024.  
  1025.   Now, if the line contains { at the start the editor goes to the first column
  1026. after the {.
  1027.  
  1028.   If the line contains } at the start the editor will go to the same column of
  1029. the } and then will perform a <Backspace>. If the Real Tabs mode is off,
  1030. that's an unindent.  (Section 4.3).
  1031.  
  1032.   If the line starts with a C++ comment the effect is the same as in
  1033. Autoindent.  (Section 4.2).
  1034.  
  1035.   If the line starts with a C comment the editor will try to skip the comment
  1036. and analyze the rest of the line, but if the comment doesn't end on this line
  1037. the editor will go to the column where the `/' is.
  1038.  
  1039.   If the line starts with `/' the editor goes to this column.
  1040.  
  1041.   If the line has more `(' than `)' the editor will go to the column of the
  1042. first non-blank after the first `('.
  1043.  
  1044.   If the line has more `)' than `(' the editor will search the line where the
  1045. number of parentheses is balanced, then will analyze this line. If the whole
  1046. line still generates an unbalanced situation the editor will go to the first
  1047. used column in the line that was found the first time. But if this line lets
  1048. all balanced the editor will take the first word on the line and will use it
  1049. as reference.
  1050.  
  1051.   At last, and according to the word found, the editor will use this word as
  1052. reference. The editor recognises the following keywords:
  1053.  
  1054.    * `do'
  1055.      - Action: +2 but not if ... ;
  1056.  
  1057.    * `if'
  1058.      - Action: +2 but not if ... ;
  1059.  
  1060.    * `for'
  1061.      - Action: +3 but not if ... ;
  1062.  
  1063.    * `else'
  1064.      - Action: +2
  1065.  
  1066.    * `case'
  1067.      - Action: +5
  1068.  
  1069.    * `while'
  1070.      - Action: +2 but not if ... ;
  1071.  
  1072.    * `switch'
  1073.      - Action: +2
  1074.  
  1075.    * `break'
  1076.      - Action: unindent
  1077.  
  1078.    * `return'
  1079.      - Action: unindent
  1080.  
  1081.    * `default'
  1082.      - Action: +5
  1083.  
  1084.   The numbers are how many spaces are added with reference to the first letter
  1085. of the word.  'not if ... ;' specified means that, if the line ends with a
  1086. semicolon, the editor will do the same as for Autoindent.  (Section 4.2). The
  1087. unindent is performed with <Backspace>.
  1088.  
  1089.   Seasick?  (Section 4.5.2).
  1090.  
  1091.   Note: Some of these features were added in v0.2.14 of the editor based on a
  1092. suggestion of <Bradford L. Spencer, stud73@nortel.ca> about the behaviour of
  1093. the mode on a line like this `printf("Num: %d",' with the rest of the
  1094. parameters on the next line.
  1095.  
  1096. 4.5.2 Do you have more examples?
  1097. --------------------------------
  1098.  
  1099.   Well here are some examples. I used a strange convention, like this: if I say
  1100. type `a[ENTER]{', type the letter `a', then press `<ENTER>' and finally press
  1101. the `{' key.
  1102.  
  1103. Example 1: (Is similar to one explained before but is to show the convention)
  1104.  
  1105.      Type:
  1106.      if (a==1)[ENTER]{[ENTER]a=2;[ENTER]b=3;[ENTER][BACKSPACE]}[ENTER]
  1107.      
  1108.      You'll get:
  1109.      
  1110.      if (a==1)
  1111.        {
  1112.         a=2;
  1113.         b=3;
  1114.        }
  1115.      [<--- cursor here]
  1116.  
  1117. Example 2: A switch/case example
  1118.  
  1119.      Type:
  1120.      switch(a)[ENTER]{[ENTER]case 1:[ENTER]a=2;[ENTER]b=3;[ENTER]break;
  1121.      [ENTER]case 2:[ENTER]b=5;[ENTER]break;[ENTER][BACKSPACE]}[ENTER]
  1122.      
  1123.      You'll get:
  1124.      
  1125.      switch(a)
  1126.        {
  1127.         case 1:
  1128.              a=2;
  1129.              b=3;
  1130.              break;
  1131.         case 2:
  1132.              b=5;
  1133.              break;
  1134.        }
  1135.      [<--- cursor here]
  1136.  
  1137. Example 3: A call to a function that takes a lot of parameters
  1138.  
  1139.      Type:
  1140.      printf([SPACE]"Num: %d",[ENTER]a[SPACE]);[ENTER]
  1141.      
  1142.      You'll get:
  1143.      
  1144.      printf( "Num: %d",
  1145.              a );
  1146.      [<--- cursor here]
  1147.  
  1148. Example 4: A lot of parentheses
  1149.  
  1150.      Type:
  1151.      if[SPACE]([SPACE](a==1)[SPACE]||[ENTER](b==2)[SPACE]||[ENTER]
  1152.      c[SPACE])[ENTER]
  1153.      
  1154.      You'll get:
  1155.      
  1156.      if ( (a==1) ||
  1157.           (b==2) ||
  1158.           c )
  1159.        [<--- cursor here]
  1160.  
  1161. Example 5: Comment trying to interfere part 1
  1162.  
  1163.      Type:
  1164.      /*-a-*/for[SPACE](x=1;x;--x)[ENTER]
  1165.      
  1166.      You'll get:
  1167.      
  1168.      /*-a-*/for (x=1;x;--x)
  1169.                [<--- cursor here]
  1170.  
  1171. Example 6: Comment trying to interfere part 2
  1172.  
  1173.      Type:
  1174.      for[SPACE](x=1;x;--x);[SPACE]//-b[ENTER]
  1175.      
  1176.      You'll get:
  1177.      
  1178.      for (x=1;x;--x); //-b
  1179.      [<--- cursor here]
  1180.  
  1181.  Note: Of course you can fool the editor but as you can see it is relatively
  1182. smart ;-).
  1183.  
  1184. 4.6 Column cursor
  1185. =================
  1186.  
  1187.   This setting enables an strange feature of the editor, when this mode is on
  1188. the column where the cursor is is highlighted. This feature is very good to
  1189. check if some part of your code is aligned.
  1190.  
  1191.   If you like this mode but is very uncomfortable to use all the time contact
  1192. me and if I get enough feedback I'll put this thing in a key to be turned
  1193. on/off quickly.
  1194.  
  1195. 4.7 Row cursor
  1196. ==============
  1197.  
  1198.   This setting is similar to the column cursor but acts on the row where the
  1199. cursor is. If you enable the two modes you'll get a cross on the screen
  1200. showing where the cursor is.
  1201.  
  1202. 4.8 Match pair highlight
  1203. ========================
  1204.  
  1205.   This mode acts showing the pairs of (/), [/] and {/} on the fly. Each time
  1206. you type one of these symbols the editor will search the matching pair, if
  1207. the editor finds it and the match is on the screen both will be highlighted,
  1208. if the match is outside the screen the editor will inform the position on the
  1209. status line, and if there is no match the editor will inform the situation in
  1210. the status line too.
  1211.  
  1212.   That's very useful when you are typing complex parenthetical expressions or a
  1213. very nested code. You can use it jointly with the `cmbSearchStart',
  1214. `cmbSearchEnd', `cmbSearchOpPar', `cmbSearchClPar', `cmbSearchOpCor' and
  1215. `cmbSearchClCor' commands. ( (Section 2.6)).
  1216.  
  1217. 4.9 Syntax Highlight
  1218. ====================
  1219.  
  1220.   The editor can highlight the syntax of your code. The available modes are:
  1221.  
  1222.    * No highlight, all the code is with the same color.
  1223.  
  1224.    * C/C++ Highlight.
  1225.  
  1226.    * Pascal Highlight.
  1227.  
  1228.    * Clipper Highlight.
  1229.  
  1230.   The kind of highlight is chosen automatically in RHIDE using the extention of
  1231. the file.
  1232.  
  1233.   The C/C++ highlight was designed for the GNU C compiler.
  1234.  
  1235.   The Pascal highlight was designed for the GNU Pascal compiler.
  1236.  
  1237.   The Clipper highlight was designed for the CA-Clipper 5 compiler.
  1238.  
  1239. 5 Calculator
  1240. ************
  1241.  
  1242.   The calculator inside the editor was made by Laszlo Molnar. Laszlo is a
  1243. friend of mine from Hungary and is the author of the great DJP progam (a
  1244. djgpp exe's compressor).
  1245.  
  1246.   The sources of the calculator are in the `parser.c' file. They are free and
  1247. you can use it for any purpose.
  1248.  
  1249.   Here is the documentation of the calculator written by Laszlo:
  1250.  
  1251.   The purpose of this program, to provide a simple but powerful 'calculator'
  1252. for programmers, to help with coding and debugging, where GDB's expression
  1253. evaluator is not enough.
  1254.  
  1255.   You may say "Hey, I can write a better one with flex and bison", and you may
  1256. be right. I can make a better one too. But it'll be 4-5 times longer!  This
  1257. calculator is only 10 kbytes of C code. What I think? It's not that bad.
  1258.  
  1259.   The parser algorithm I use is called 'Operator Precedence Parsing' (I
  1260. translated this from Hungarian, so I may be wrong ;-). It works with
  1261. 'operator precedence grammars' (a subset of LR(1) grammars), which means that
  1262. there can't be two non-terminating tokens next to each other on the right
  1263. side of your grammar rules. It's ideal for expression evaluation.
  1264.  
  1265.   With this parser you can use numbers, operators, parentheses and functions
  1266. like in C.
  1267.  
  1268. Here are the operators in decreasing precedence:
  1269.  
  1270.   1. `~' unary not `-' unary minus
  1271.  
  1272.   2. `**' power
  1273.  
  1274.   3. `*' multiplication `/' division `%' modulo
  1275.  
  1276.   4. `+' plus `-' binary minus
  1277.  
  1278.   5. `<<' shift left `>>' shift right
  1279.  
  1280.   6. `&' logical and
  1281.  
  1282.   7. `^' logical xor
  1283.  
  1284.   8. `|' logical or
  1285.  
  1286.   The calculator includes the following functions: sin\, cos\, tan\, sinh\,
  1287. cosh\, tanh\, asin\, acos\, atan\, log\, log10\, exp\, abs\, sqrt\, ceil and
  1288. floor.  They work as you expected.  Additionally the calculator provides some
  1289. radix conversion routines: bin\, oct\, dec and hex.
  1290.  
  1291.   The calculator uses doubles, but you can use numbers in the usual integer
  1292. formats also: 0x... for base 16, 0b... for base 2 and 0... for base 8.  The
  1293. result of the calculation is displayed as a double for base 10, and converted
  1294. to long long format for the other radixes.
  1295.  
  1296. Error codes:
  1297.  
  1298.    * -1
  1299.      - Meaning: yylex()   failed e.g.  `1+#'
  1300.  
  1301.    * -3
  1302.      - Meaning: yyparse() failed e.g.  `1+2)'
  1303.  
  1304.    * -4
  1305.      - Meaning: floating point exception e.g. `sqrt(-1)'
  1306.  
  1307. 6 How to contact me
  1308. *******************
  1309.  
  1310.   If you have any suggestions or bug report contact me at the address shown in
  1311. the author section.  (Section 1.3).
  1312.  
  1313. 6.1 Bugs
  1314. ========
  1315.  
  1316.   If you find a bug please contact me, the Undo thing is the most complex one
  1317. and I know that needs some work on it.
  1318.  
  1319.   When reporting a bug please don't tell me: Some times some strange thing
  1320. happend ... Try to find a pattern to the problem. What situation triggers the
  1321. problem? ... with which file(s)? Then send me the file and the description.
  1322.  
  1323.   When sending to me a file UUEncode it to avoid problems related with the
  1324. e-mail.
  1325.  
  1326. 7 Index
  1327. *******
  1328.  
  1329. * Autoindent:                            Section 4.2
  1330. * Blocks:                                Section 2.4
  1331. * Blocks - Rectangular:                  Section 2.4.4
  1332. * Bugs:                                  Section 6.1
  1333. * Column cursor:                         Section 4.6
  1334. * How to contact me:                     Chapter 6
  1335. * Indentation:                           Section 2.4.3
  1336. * Insert and Delete:                     Section 2.3
  1337. * Intelligent C indent:                  Section 4.5
  1338. * keybind.cc:                            Section 3.1
  1339. * keybind.h:                             Section 3.1
  1340. * keybind.txt:                           Section 3.1
  1341. * Match pair highlight:                  Section 4.8
  1342. * Movement:                              Section 2.2
  1343. * Overwrite:                             Section 4.1
  1344. * Persistent Blocks:                     Section 2.4.1
  1345. * pmacros.txt:                           Section 2.5
  1346. * Pseudo Macros:                         Section 2.5
  1347. * Real Tabs:                             Section 4.3
  1348. * Row cursor:                            Section 4.7
  1349. * scan codes:                            Section 3.2
  1350. * TABs:                                  Section 4.3
  1351. * Use Real Tabs:                         Section 4.3
  1352.  
  1353. 8 Index of key commands
  1354. ***********************
  1355.  
  1356. * Autoindent mode on/off <^O>:           Section 2.6
  1357. * Beginning of line <Home>:              Section 2.2
  1358. * Bottom of file <^Q-C>:                 Section 2.2
  1359. * Bottom of window <^Q-X>:               Section 2.2
  1360. * Character left <Left arrow>:           Section 2.2
  1361. * Character right <Right arrow>:         Section 2.2
  1362. * cmbBackSpace <Backspace>:              Section 2.3
  1363. * cmbCharLeft <Left arrow>:              Section 2.2
  1364. * cmbCharRight <Right arrow>:            Section 2.2
  1365. * cmbClear <^Del>:                       Section 2.4
  1366. * cmbCompactBuffer <From menu>:          Section 2.6
  1367. * cmbCopy <^Ins>:                        Section 2.4
  1368. * cmbCopyBlock <^K-C>:                   Section 2.4
  1369. * cmbCut <^K-Y>:                         Section 2.4
  1370. * cmbDelChar <Del>:                      Section 2.3
  1371. * cmbDelEnd <^Q-Y>:                      Section 2.3
  1372. * cmbDelLine <^Y>:                       Section 2.3
  1373. * cmbDelPrevWord <^Backspace>:           Section 2.3
  1374. * cmbDelStart <^Q-H>:                    Section 2.3
  1375. * cmbDelWord <^T>:                       Section 2.3
  1376. * cmbEndSelect <^K-K>:                   Section 2.4
  1377. * cmbExpandAllTabs <From menu>:          Section 2.6
  1378. * cmbExpandCode <^Space>:                Section 2.6
  1379. * cmbFirstLineInScreen <^Q-E>:           Section 2.2
  1380. * cmbGoBeginBlock <^Q-B>:                Section 2.4
  1381. * cmbGoEndBlock <^Q-K>:                  Section 2.4
  1382. * cmbGotoEditorLine <^J>:                Section 2.6
  1383. * cmbGotoMarkn <^Q n*>:                  Section 2.6
  1384. * cmbHideSelect <^K-H>:                  Section 2.4
  1385. * cmbIndentBlk <^K-Tab>:                 Section 2.4.3
  1386. * cmbIndentBlkOne <^K-I>:                Section 2.4.3
  1387. * cmbIndentMode <^O>:                    Section 2.6
  1388. * cmbInsMode <Ins>:                      Section 2.3
  1389. * cmbLastLineInScreen <^Q-X>:            Section 2.2
  1390. * cmbLineDown <Down arrow>:              Section 2.2
  1391. * cmbLineEnd <End>:                      Section 2.2
  1392. * cmbLineStart <Home>:                   Section 2.2
  1393. * cmbLineUp <Up arrow>:                  Section 2.2
  1394. * cmbMarkLine <^K-L>:                    Section 2.4
  1395. * cmbMarkWord <^K-T>:                    Section 2.4
  1396. * cmbMoveBlock <^K+V>:                   Section 2.4
  1397. * cmbNewLine <Enter>:                    Section 2.3
  1398. * cmbPageDown <PgDn>:                    Section 2.2
  1399. * cmbPageUp <PgUp>:                      Section 2.2
  1400. * cmbPaste <Shift+Ins>:                  Section 2.4
  1401. * cmbPlayMacro <^F10>:                   Section 2.6
  1402. * cmbPutMarkn <^K n*>:                   Section 2.6
  1403. * cmbReadBlock <^K-R>:                   Section 2.4
  1404. * cmbRecordMacro <Shift+F10>:            Section 2.6
  1405. * cmbReplaceSelect <Shift+^Ins>:         Section 2.4
  1406. * cmbScrollDown <^Z>:                    Section 2.2
  1407. * cmbScrollUp <^W>:                      Section 2.2
  1408. * cmbSearchClCor <Shift+^]>:             Section 2.6
  1409. * cmbSearchClPar <Shift+^0>:             Section 2.6
  1410. * cmbSearchEnd <^]>:                     Section 2.6
  1411. * cmbSearchOpCor <Shift+^[>:             Section 2.6
  1412. * cmbSearchOpPar <Shift+^9>:             Section 2.6
  1413. * cmbSearchStart <^[>:                   Section 2.6
  1414. * cmbSelLength <^Q-L>:                   Section 2.4
  1415. * cmbSelRectCopy <^K-Shift+C>:           Section 2.4.4
  1416. * cmbSelRectCut <^K-ShiftT>:             Section 2.4.4
  1417. * cmbSelRectDel <^K-Shift+L>:            Section 2.4.4
  1418. * cmbSelRectEnd <^K-Shift+K>:            Section 2.4.4
  1419. * cmbSelRectHide <^K-Shift+H>:           Section 2.4.4
  1420. * cmbSelRectMove <^K+Shift+V>:           Section 2.4.4
  1421. * cmbSelRectPaste <^K-Shift+P>:          Section 2.4.4
  1422. * cmbSelRectStart <^K-Shift+B>:          Section 2.4.4
  1423. * cmbSetGlobalOptions <Alt+G>:           Section 2.6
  1424. * cmbSetLocalOptions <Alt+L>:            Section 2.6
  1425. * cmbSmartIndent <^Tab>:                 Section 2.4.3
  1426. * cmbSmartUnIndent <Shift+^Tab>:         Section 2.4.3
  1427. * cmbStartSelect <^K-B>:                 Section 2.4
  1428. * cmbStopMacro <Alt+F10>:                Section 2.6
  1429. * cmbTextEnd <^Q-C>:                     Section 2.2
  1430. * cmbTextStart <^Q-R>:                   Section 2.2
  1431. * cmbToLower <^K-O>:                     Section 2.4
  1432. * cmbToUpper <^K-M>:                     Section 2.4
  1433. * cmbUndo <Alt+Backspace>:               Section 2.6
  1434. * cmbUnIndentBlk <^K-Shift+Tab>:         Section 2.4.3
  1435. * cmbUnIndentBlkOne <^K-U>:              Section 2.4.3
  1436. * cmbWordLeft <^Left arrow>:             Section 2.2
  1437. * cmbWordRight <^Right arrow>:           Section 2.2
  1438. * cmbWriteBlock <^K-W>:                  Section 2.4
  1439. * Compact the text using tabs <From menu>: Section 2.6
  1440. * Convert all tabs in spaces <From menu>: Section 2.6
  1441. * Convert to Lowercase <^K-O>:           Section 2.4
  1442. * Convert to Uppercase <^K-M>:           Section 2.4
  1443. * Copy the selected block <^K-C>:        Section 2.4
  1444. * Copy to Clipboard <^Ins>:              Section 2.4
  1445. * Copy to special Clipboard <^K-Shift+C>: Section 2.4.4
  1446. * Delete block <^Del>:                   Section 2.4
  1447. * Delete block <^K-Shift+L>:             Section 2.4.4
  1448. * Delete block and copy it to an special Clipboard <^K-ShiftT>: Section 2.4.4
  1449. * Delete block and copy it to the Clipboard <^K-Y>: Section 2.4
  1450. * Delete character to left <Backspace>:  Section 2.3
  1451. * Delete line <^Y>:                      Section 2.3
  1452. * Delete the character under cursor <Del>: Section 2.3
  1453. * Delete to end of line <^Q-Y>:          Section 2.3
  1454. * Delete to start of line <^Q-H>:        Section 2.3
  1455. * Delete word at left <^T>:              Section 2.3
  1456. * Delete word at right <^Backspace>:     Section 2.3
  1457. * End of line <End>:                     Section 2.2
  1458. * Find place marker <^Q n*>:             Section 2.6
  1459. * Goto Line <^J>:                        Section 2.6
  1460. * Hide/Show block <^K-H>:                Section 2.4
  1461. * Hide/Show block <^K-Shift+H>:          Section 2.4.4
  1462. * Indent block <^K-Tab>:                 Section 2.4.3
  1463. * Indent block one position adding a space <^K-I>: Section 2.4.3
  1464. * Insert line <Enter>:                   Section 2.3
  1465. * Insert mode on/off <Ins>:              Section 2.3
  1466. * Line down <Down arrow>:                Section 2.2
  1467. * Line up <Up arrow>:                    Section 2.2
  1468. * Mark line <^K-L>:                      Section 2.4
  1469. * Mark word <^K-T>:                      Section 2.4
  1470. * Move block <^K+Shift+V>:               Section 2.4.4
  1471. * Move block <^K+V>:                     Section 2.4
  1472. * Move to beginning of block <^Q-B>:     Section 2.4
  1473. * Move to end of block <^Q-K>:           Section 2.4
  1474. * Page down <PgDn>:                      Section 2.2
  1475. * Page up <PgUp>:                        Section 2.2
  1476. * Paste from Clipboard <Shift+Ins>:      Section 2.4
  1477. * Paste from special Clipboard <^K-Shift+P>: Section 2.4.4
  1478. * Play a macro <^F10>:                   Section 2.6
  1479. * PMacro's Trigger <^Space>:             Section 2.6
  1480. * Read block from disk <^K-R>:           Section 2.4
  1481. * Replace the block by the Clipboard block <Shift+^Ins>: Section 2.4
  1482. * Report the length of the block <^Q-L>: Section 2.4
  1483. * Scroll the screen one line down <^Z>:  Section 2.2
  1484. * Scroll the screen one line up <^W>:    Section 2.2
  1485. * Search the ( where the cursor is <Shift+^9>: Section 2.6
  1486. * Search the ) where the cursor is <Shift+^0>: Section 2.6
  1487. * Search the [ where the cursor is <Shift+^[>: Section 2.6
  1488. * Search the ] where the cursor is <Shift+^]>: Section 2.6
  1489. * Search the close curly bracket where the cursor is <^]>: Section 2.6
  1490. * Search the open curly bracket where the cursor is <^[>: Section 2.6
  1491. * Set beginning of block <^K-B>:         Section 2.4
  1492. * Set beginning of block <^K-Shift+B>:   Section 2.4.4
  1493. * Set end of block <^K-K>:               Section 2.4
  1494. * Set end of block <^K-Shift+K>:         Section 2.4.4
  1495. * Set marker <^K n*>:                    Section 2.6
  1496. * Set the default options (Not in RHIDE) <Alt+G>: Section 2.6
  1497. * Set the options of the current window (Not in RHIDE) <Alt+L>: Section 2.6
  1498. * Smart Indent block <^Tab>:             Section 2.4.3
  1499. * Smart Unindent block <Shift+^Tab>:     Section 2.4.3
  1500. * Start recording a macro <Shift+F10>:   Section 2.6
  1501. * Stop recording a macro <Alt+F10>:      Section 2.6
  1502. * Top of file <^Q-R>:                    Section 2.2
  1503. * Top of window <^Q-E>:                  Section 2.2
  1504. * Undo <Alt+Backspace>:                  Section 2.6
  1505. * Unindent block <^K-Shift+Tab>:         Section 2.4.3
  1506. * Unindent block one character - not an x position <^K-U>: Section 2.4.3
  1507. * Word left <^Left arrow>:               Section 2.2
  1508. * Word right <^Right arrow>:             Section 2.2
  1509. * Write block to disk <^K-W>:            Section 2.4
  1510.  
  1511.